package main

import "fmt"
/**

lcp(S1~Sn) = lcp(lcp(lcp(S1,S2),S3),....Sn)
字符串数组两个字符串两个字符串进行求公共最长前缀，依次向右移动，直至移动到最后，返回最长子串

如果在尚未遍历完所有的字符串时，最长公共前缀已经是空串，则最长公共前缀一定是空串，因此不需要继续遍历剩下的字符串，直接返回空串即可。

 */
func longestCommonPrefix(strs []string) string {
	//如果strs数组为空这返回""
	if len(strs) == 0 {
		return ""
	}
	prefix := strs[0]
	count := len(strs)
	for i := 1; i < count; i++ {
		prefix = lcp(prefix, strs[i])
		if len(prefix) == 0 {
			break
		}
	}
	return prefix
}
//两个字符串公共子串
func lcp(str1, str2 string) string {
	length := min(len(str1), len(str2))
	index := 0
	for index < length && str1[index] == str2[index] {
		index++
	}
	return str1[:index]
}

func min(x, y int) int {
	if x < y {
		return x
	}
	return y
}

func main() {
	var a =[]string{"abcadc","abcad"}
	fmt.Printf(longestCommonPrefix(a))
}
